Olympic Rings

Introduction

This report aim to illustrate Olympic Medalist winners throughout the years. This is done by creating different tables, plots and a bar animation.

The rekkefølge of the report is as follows

  1. Table for total amount of medals won
  2. Plot showing amount of events split into winter and summer olympics
  3. Table illustrating the most-winning countries
  4. Word clouds representing the frequenzy of medals for all medals combined and for each type of medal separately
  5. Plot showing amount of gold medals won per sport
  6. Table for most-winning country in a single sport
  7. Table illustrating the highest participation in a singe sport
  8. Deep dive into the US: medals won over time
  9. Table for top ten winning contestants
  10. Plot showing the genders’ participation over time
  11. Bar animation for gold medals over the years

NB

The used data sets are downloaded from Kaggle and contains medal winners from 1896 - 2014. We were unable to find datasets including the most recent olympics, thus the summer olympics from 2016 is not included.




1. Total Amount of Medals won

Total Number of Medals
Medal Number
Bronze 10055
Gold 9929
Silver 9973



2. Amount of Events




3. Most-Winning Countries

Country Total number of medals Gold Silver Bronze Contestants
United States 5238 2402 1571 1265 5238
United Kingdom 1799 580 632 587 1799
Germany 1665 589 504 572 1665
France 1548 444 526 578 1548
Italy 1488 534 473 481 1488
Sweden 1477 476 496 505 1477



4. Word Clouds

Combined

This plot illustrates all medals combined

From the word cloud, we see that the US is the most winning nation, and that their lead in number of medals won is substantial.




Gold

This plot illustrates gold medals

The US has a substantial larger number of gold medals compared to the rest of the countries.




Silver

This plot illustrates silver medals




Bronze

This plot illustrates bronze medals

Compared to gold and silver medals, the distribution of bronze medals is more even among the different countries.




5. Gold Medals per sport




6. Most Winning Country in a Single Sport

Most Winning Country in a Single Sport
Event Country Medals won Total number of medals %
Basketball United States 318 746 0.426
Ice Hockey Canada 359 1215 0.295
Ice Hockey United States 280 1215 0.230
Hockey Netherlands 249 1297 0.192
Ice Hockey Sweden 218 1215 0.179

The table shows which country which has won the most country in a single sport percentage wise compared to the total amount of medals given.

The table shows that the US has won the most medals in a single sport, which is Basketball. In this sport, they account for 42,6% of the medals.




7. Highest Participation in a Single Sport

Table: Which country participates most in a single sport?
Country Sport Number of Events
United States Wrestling 54
United States Athletics 44
United States Shooting 41
Norway Skiing 40
Sweden Wrestling 40
Japan Judo 39

(Score given in absolute numbers)

The US participates the most in a single sport, which is Wrestling.

Not surprisingly, Norway is the country with the highest participation in skiing




8. Deep Dive into the US:

Since the US has won the most medals both overall and in a single sport (percentage wise), and is also the country with the highest participation in a single sport, a deep dive is interesting.

The plot showcases the development of number of medals for the US. There is a somewhat similar pattern for the different types of medals. Gold medals (green line) most often represent the most attained medal type through time.

The plot also illustrate:

  • Peak in 1905
  • Rise in number of gold medals from 1980



9. Most Winning Contestant

athlete sport medals
PHELPS, Michael Aquatics 22
BJOERNDALEN, Ole Einar Biathlon 13
MANGIAROTTI, Edoardo Fencing 13
ONO, Takashi Gymnastics 13
COUGHLIN, Natalie Aquatics 12
DAEHLIE, Björn Skiing 12
KATO, Sawao Gymnastics 12
NEMOV, Alexei Gymnastics 12
NURMI, Paavo Athletics 12
THOMPSON, Jenny Aquatics 12

The table shows that Michael Phelps is the most winning athlete, with 22 medals. Both Ole Einar Bjørndalen and Bjørn Dæhlie are among the top winners, with respectively 13 and 12 medals each.

(Anno 2020 Pelphs has a total of 28 olympic medals, still reigning as most winning athlete)

Michael Phelps




10. Participation Development by Gender

Like other parts of society, the olympic games excluded female participation for quite some time. The following plot will demonstrate the gender’s participation development through time.

From 1900, female participation started rising. However, it would take almost 96 years before the participation of the genders would represent about 50% of the events each.




11. Bar Animation for Gold Medals over the Years

Top 10 countries

The End

LS0tDQp0aXRsZTogIk1hcmtkb3duMiINCmF1dGhvcjogIkJBTjQwMCINCmRhdGU6ICIyMyAxMSAyMDIwIg0Kb3V0cHV0OiANCiBodG1sX2RvY3VtZW50Og0KICAgIHRoZW1lOiBwYXBlcg0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQoNCiFbXShodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zLzUvNWMvT2x5bXBpY19yaW5nc193aXRob3V0X3JpbXMuc3ZnKXt3aWR0aD04MDBweH0NCg0KDQpbT2x5bXBpYyBSaW5nc10oaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy81LzVjL09seW1waWNfcmluZ3Nfd2l0aG91dF9yaW1zLnN2ZykNCg0KIyMgSW50cm9kdWN0aW9uDQoNClRoaXMgcmVwb3J0IGFpbSB0byBpbGx1c3RyYXRlIE9seW1waWMgTWVkYWxpc3Qgd2lubmVycyB0aHJvdWdob3V0IHRoZSB5ZWFycy4gDQpUaGlzIGlzIGRvbmUgYnkgY3JlYXRpbmcgZGlmZmVyZW50IHRhYmxlcywgcGxvdHMgYW5kIGEgYmFyIGFuaW1hdGlvbi4NCg0KVGhlIHJla2tlZsO4bGdlIG9mIHRoZSByZXBvcnQgaXMgYXMgZm9sbG93cw0KDQoxLiBUYWJsZSBmb3IgdG90YWwgYW1vdW50IG9mIG1lZGFscyB3b24NCjIuIFBsb3Qgc2hvd2luZyBhbW91bnQgb2YgZXZlbnRzIHNwbGl0IGludG8gd2ludGVyIGFuZCBzdW1tZXIgb2x5bXBpY3MNCjMuIFRhYmxlIGlsbHVzdHJhdGluZyB0aGUgbW9zdC13aW5uaW5nIGNvdW50cmllcw0KNC4gV29yZCBjbG91ZHMgcmVwcmVzZW50aW5nIHRoZSBmcmVxdWVuenkgb2YgbWVkYWxzIGZvciBhbGwgbWVkYWxzIGNvbWJpbmVkIGFuZCBmb3IgZWFjaCB0eXBlIG9mIG1lZGFsIHNlcGFyYXRlbHkNCjUuIFBsb3Qgc2hvd2luZyBhbW91bnQgb2YgZ29sZCBtZWRhbHMgd29uIHBlciBzcG9ydA0KNi4gVGFibGUgZm9yIG1vc3Qtd2lubmluZyBjb3VudHJ5IGluIGEgc2luZ2xlIHNwb3J0DQo3LiBUYWJsZSBpbGx1c3RyYXRpbmcgdGhlIGhpZ2hlc3QgcGFydGljaXBhdGlvbiBpbiBhIHNpbmdlIHNwb3J0DQo4LiBEZWVwIGRpdmUgaW50byB0aGUgVVM6IG1lZGFscyB3b24gb3ZlciB0aW1lDQo5LiBUYWJsZSBmb3IgdG9wIHRlbiB3aW5uaW5nIGNvbnRlc3RhbnRzDQoxMC4gUGxvdCBzaG93aW5nIHRoZSBnZW5kZXJzJyBwYXJ0aWNpcGF0aW9uIG92ZXIgdGltZQ0KMTEuIEJhciBhbmltYXRpb24gZm9yIGdvbGQgbWVkYWxzIG92ZXIgdGhlIHllYXJzDQoNCg0KKk5CKg0KDQp8DQoNClRoZSB1c2VkIGRhdGEgc2V0cyBhcmUgZG93bmxvYWRlZCBmcm9tIFtLYWdnbGVdKGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vdGhlLWd1YXJkaWFuL29seW1waWMtZ2FtZXMpIGFuZCBjb250YWlucyBtZWRhbCB3aW5uZXJzIGZyb20gMTg5NiAtIDIwMTQuIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgZGF0YXNldHMgaW5jbHVkaW5nIHRoZSBtb3N0IHJlY2VudCBvbHltcGljcywgdGh1cyB0aGUgc3VtbWVyIG9seW1waWNzIGZyb20gMjAxNiBpcyBub3QgaW5jbHVkZWQuDQoNCg0KDQoNCmBgYHtyIGxvYWQtcGFja2FnZXMsIGluY2x1ZGU9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkoc3ApDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHJnZGFsKQ0KbGlicmFyeShzZikNCmxpYnJhcnkobHdnZW9tKQ0KbGlicmFyeShnZ2FuaW1hdGUpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KHdvcmRjbG91ZCkNCmxpYnJhcnkodG0pDQpsaWJyYXJ5KFNub3diYWxsQykNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQoNCmBgYA0KDQpgYGB7ciBzb3J0IGRhdGEsIGluY2x1ZGU9RkFMU0V9DQojIExvYWRpbmcgZGF0YSBzZXRzIA0Kd2ludGVyPC1yZWFkX2Nzdigid2ludGVyLmNzdiIpICU+JSAgICAgICAgICAgICAgIyBXaW50ZXIgb2x5bXBpY3MNCiAgcmVuYW1lKGNvZGUgICA9ICJDb3VudHJ5IikgJT4lICAgICAgICAgICAgICAgICMgcmVuYW1pbmcgdGhlIGNvbHVtbiAiQ291bnRyeSIgdG8gY29kZSwgdG8gbWVyZ2Ugd2l0aCAiaW5mbyINCiAgbXV0YXRlKHNlYXNvbiA9ICJ3aW50ZXIiKQ0KDQpzdW1tZXI8LXJlYWRfY3N2KCJzdW1tZXIuY3N2IikgJT4lICAgICAgICAgICAgICAjIFN1bW1lciBvbHltcGljcw0KICByZW5hbWUoY29kZSAgID0gIkNvdW50cnkiKSAlPiUgICAgICAgICAgICAgICAgIyByZW5hbWluZyB0aGUgY29sdW1uICJDb3VudHJ5IiB0byBjb2RlLCB0byBtZXJnZSB3aXRoICJpbmZvIg0KICBtdXRhdGUoc2Vhc29uID0gInN1bW1lciIpDQoNCg0KaW5mbzwtIHJlYWRfY3N2KCJkaWN0aW9uYXJ5LmNzdiIpICU+JSAgICAgICAgICAgIyBHZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IGNvdW50cmllcy4gDQogIG5hLm9taXQoKSAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVzaW5nIHRoZSBjb2x1bW4gImNvZGUiIHRvIGJlDQogIHJlbmFtZShjb2RlID0gIkNvZGUiKSAgICAgICAgICAgICAgICAgICAgICAgICAjIGFibGUgdG8gbWVyZ2UgdGhlIGRhdGEgZnJhbWVzLg0KDQoNCiMgd2Ugd2FudCBvbmUgZGF0YSBmcmFtZSBjb250YWluaW5nIGJvdGggc3VtbWVyIGFuZCB3aW50ZXIgb2x5bXBpY3M6DQpkZi5vbDwtIHdpbnRlciAlPiUgDQogIGJpbmRfcm93cyhzdW1tZXIpICU+JSANCiAgaW5uZXJfam9pbiguLCBpbmZvLCBieSA9ICJjb2RlIikgDQoNCiMgVXNpbmcgYmluZF9yb3dzIHRvIGNvbWJpbmUgdGhlIGRmIHN1bW1lciBhbmQgd2ludGVyLCANCiMgYW5kIGlubmVyX2pvaW4gdG8gYmluZCB0aGVtIGJ5IHRoZSBjb2x1bW4gY29udGFpbmluZyBjb3VudHJ5IGNvZGUgIA0KDQoNCmNvbG5hbWVzKGRmLm9sKSA8LSB0b2xvd2VyKGNvbG5hbWVzKGRmLm9sKSkNCmBgYA0KDQp8DQp8DQp8DQp8DQoNCg0KIyMgMS4gVG90YWwgQW1vdW50IG9mIE1lZGFscyB3b24NCg0KYGBge3IgbWVkYWxzcywgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KDQpkZi5vbCAlPiUgDQogIGNvdW50KG1lZGFsKSAlPiUgDQogIGtibChjYXB0aW9uID0gIlRvdGFsIE51bWJlciBvZiBNZWRhbHMiLCBjb2wubmFtZXMgPSBjKCJNZWRhbCIsICJOdW1iZXIiKSkgJT4lIA0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCBmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIpDQoNCmBgYA0KDQp8DQp8DQp8DQp8DQoNCiMjIDIuIEFtb3VudCBvZiBFdmVudHMgDQoNCmBgYHtyIGV2ZW50cywgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCg0KZGYub2wlPiUNCiAgZ3JvdXBfYnkoc2Vhc29uLCB5ZWFyKSAlPiUNCiAgc3VtbWFyaXNlKEV2ZW50cyA9IG5fZGlzdGluY3QoZXZlbnQpKSAlPiUNCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IHllYXIsIHkgPSBFdmVudHMsIGNvbG9yID0gc2Vhc29uKSkgKyANCiAgdGhlbWVfYncoKSArDQogIGdlb21fcG9pbnQoKSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVzaW5nIGJvdGggcG9pbnRzIGFuZCBsaW5lcw0KICBnZW9tX2xpbmUoKSANCg0KYGBgDQoNCnwNCnwNCnwNCnwNCg0KDQojIyAzLiBNb3N0LVdpbm5pbmcgQ291bnRyaWVzDQoNCmBgYHtyIG1lZGFscywgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCg0KIyBmdW5jdGlvbiBmb3IgZGF0YSBmcmFtZSBzZXBhcmF0aW5nIHdpbm5lcnMgYnkgdHlwZSBhbmQgY291bnRyeQ0KDQptZWRhbHM8LSBmdW5jdGlvbihkYXRhLCBieV95ZWFyID0gRkFMU0UpIHsNCiAgDQogIA0KICAjIHByZXBhcmluZyB0aGUgZGF0YQ0KICBvbCA8LSBkYXRhICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICBtdXRhdGUoR29sZCAgID0gbWVkYWwgPT0gIkdvbGQiLCAgICAgICAgICAgIyBzcGxpdHRpbmcgdGhlIG1lZGFsIGNvbHVtbg0KICAgICAgICAgICBTaWx2ZXIgPSBtZWRhbCA9PSAiU2lsdmVyIiwgICAgICAgICAjIGludG8gc2VwYXJhdGUgY29sdW1ucyBmb3IgDQogICAgICAgICAgIEJyb256ZSA9IG1lZGFsID09ICJCcm9uemUiKSAgICAgICAgICMgZ29sZCwgc2lsdmVyIGFuZCBicm9uemUgbWVkYWxzDQogIA0KICANCiAgIyBUaGVuIGZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIGlmKGlzVFJVRShieV95ZWFyKSkgeyAgICAgICAgICAgICAgICAgICAgICAgDQogICAgb2w8LSBvbCAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ3JvdXBpbmcgYnkgeWVhciBhbmQgY291bnRyeSBpZiAgDQogICAgICBncm91cF9ieSh5ZWFyLCBjb3VudHJ5KSAgICAgICAgICAgICAgICAgICAgIyBUUlVFIGlzIHNldCBpbiB0aGUgYXJndW1lbnQsDQogIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ3JvdXAgb25seSBieSBjb3VudHJ5IGlmIG5vdA0KICAgIG9sPC0gb2wgJT4lIA0KICAgICAgZ3JvdXBfYnkoY291bnRyeSkNCiAgfQ0KICANCiAgIyBkaXZpZGluZyBieSBtZWRhbCB0eXBlDQogIG9sIDwtIG9sICU+JSANCiAgICBkcGx5cjo6c3VtbWFyaXNlKCAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgIE5yX01lZGFscyAgID0gc3VtKCFpcy5uYShtZWRhbCkpLCAgICAgICAjIGNvdW50aW5nIHRvdGFsIGFtb3VudCBvZiBtZWRhbHMNCiAgICAgIEdvbGQgICAgICAgID0gc3VtKEdvbGQsICAgbmEucm0gPSBUKSwgICAjIHNvcnRpbmcgYnkgY291bnRyeSBhbmQgbnVtYmVyIG9mIA0KICAgICAgU2lsdmVyICAgICAgPSBzdW0oU2lsdmVyLCBuYS5ybSA9IFQpLCAgICMgZWFjaCB0eXBlIG9mIG1lZGFscywgY291bnRpbmcgDQogICAgICBCcm9uemUgICAgICA9IHN1bShCcm9uemUsIG5hLnJtID0gVCksICAgIyB3aW5uaW5nIGNvbnRlc3RhbnRzLg0KICAgICAgY29udGVzdGFudHMgPSBuKCkpICU+JSAgICAgICAgICAgICAgICAgIA0KICAgIGFycmFuZ2UoLU5yX01lZGFscykgICAgICAgICAgICAgICAgICAgICAgICMgbW9zdCB3aW5uaW5nIGNvdW50cmllcyBhdCB0aGUgdG9wIA0KfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIWlzLm5hIC0tPiBzdW0gYWxsIHZhbHVlcyB0aGF0IGlzDQojIG5vdCBlcXVhbCB0byBuYS4NCg0KDQojIFRoZW4sIHVzaW5nIHRoZSBmdW5jdGlvbiB0byBjcmVhdGUgZGYgICAgICAgICAgICAgICAgICANCm9ubHkubWVkYWxzPC1tZWRhbHMoZGYub2wsIGJ5X3llYXIgPSBGQUxTRSkgICAjIHNvcnRpbmcgb25seSBieSBjb3VudHJ5DQoNCmtibChoZWFkKG9ubHkubWVkYWxzKSwNCiAgICBjb2wubmFtZXMgPSBjKCdDb3VudHJ5JywgJ1RvdGFsIG51bWJlciBvZiBtZWRhbHMnLCAnR29sZCcsICdTaWx2ZXInLCAnQnJvbnplJywgJ0NvbnRlc3RhbnRzJyksDQogICAgYWxpZ24gPSAibGNjY2NjIiwNCiAgICB0aXRsZSA9ICJNb3N0IFdpbm5pbmcgTmF0aW9ucyIpICU+JSANCiAga2FibGVfbWF0ZXJpYWwoYygic3RyaXBlZCIsICJob3ZlciIpKQ0KDQpgYGANCg0KfA0KfA0KfA0KfA0KDQojIyA0LiBXb3JkIENsb3VkcyB7LnRhYnNldH0NCg0KYGBge3Igd29yZCBjbG91ZCBjb2RlLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0V9DQoNCg0KZGYubWVkYWxzIDwtIGRmLm9sICU+JSANCiAgbXV0YXRlKEdvbGQgICA9IG1lZGFsID09ICJHb2xkIiwgICAgICAgICAgICMgc3BsaXR0aW5nIHRoZSBtZWRhbCBjb2x1bW4NCiAgICAgICAgICBTaWx2ZXIgPSBtZWRhbCA9PSAiU2lsdmVyIiwgICAgICAgICAjIGludG8gc2VwYXJhdGUgY29sdW1ucyBmb3IgDQogICAgICAgICAgQnJvbnplID0gbWVkYWwgPT0gIkJyb256ZSIpICU+JSANCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lIA0KICBzdW1tYXJpc2UoICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIEFsbCAgICAgICAgID0gc3VtKCFpcy5uYShtZWRhbCkpLCAgICAgICAjIGNvdW50aW5nIHRvdGFsIGFtb3VudCBvZiBtZWRhbHMNCiAgICBHb2xkICAgICAgICA9IHN1bShHb2xkLCAgIG5hLnJtID0gVCksICAgIyBzb3J0aW5nIGJ5IGNvdW50cnkgYW5kIG51bWJlciBvZiANCiAgICBTaWx2ZXIgICAgICA9IHN1bShTaWx2ZXIsIG5hLnJtID0gVCksICAgIyBlYWNoIHR5cGUgb2YgbWVkYWxzLCBjb3VudGluZyANCiAgICBCcm9uemUgICAgICA9IHN1bShCcm9uemUsIG5hLnJtID0gVCkpDQpgYGANCg0KIyMjIENvbWJpbmVkDQpUaGlzIHBsb3QgaWxsdXN0cmF0ZXMgYWxsIG1lZGFscyBjb21iaW5lZA0KDQpgYGB7ciBDb21iaW5lZCwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KDQp3b3JkY2xvdWQod29yZHMgPSBkZi5tZWRhbHMkY291bnRyeSwNCiAgICAgICAgICBmcmVxID0gZGYubWVkYWxzJEFsbCwNCiAgICAgICAgICBjb2xvcnMgPSBicmV3ZXIucGFsKDgsICJEYXJrMiIpLA0KICAgICAgICAgIHJhbmRvbS5vcmRlciA9IEZBTFNFKQ0KYGBgDQoNCkZyb20gdGhlIHdvcmQgY2xvdWQsIHdlIHNlZSB0aGF0IHRoZSBVUyBpcyB0aGUgbW9zdCB3aW5uaW5nIG5hdGlvbiwgYW5kIHRoYXQgdGhlaXIgbGVhZCBpbiBudW1iZXIgb2YgbWVkYWxzIHdvbiBpcyBzdWJzdGFudGlhbC4NCg0KfA0KfA0KfA0KfA0KDQojIyMgR29sZA0KVGhpcyBwbG90IGlsbHVzdHJhdGVzIGdvbGQgbWVkYWxzDQpgYGB7ciBHb2xkLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0V9DQoNCndvcmRjbG91ZCh3b3JkcyA9IGRmLm1lZGFscyRjb3VudHJ5LA0KICAgICAgICAgIGZyZXEgPSBkZi5tZWRhbHMkR29sZCwNCiAgICAgICAgICBjb2xvcnMgPSBicmV3ZXIucGFsKDgsICJEYXJrMiIpLA0KICAgICAgICAgIHJhbmRvbS5vcmRlciA9IEZBTFNFKQ0KYGBgDQoNClRoZSBVUyBoYXMgYSBzdWJzdGFudGlhbCBsYXJnZXIgbnVtYmVyIG9mIGdvbGQgbWVkYWxzIGNvbXBhcmVkIHRvIHRoZSByZXN0IG9mIHRoZSBjb3VudHJpZXMuDQoNCnwNCnwNCnwNCnwNCg0KIyMjIFNpbHZlcg0KVGhpcyBwbG90IGlsbHVzdHJhdGVzIHNpbHZlciBtZWRhbHMNCmBgYHtyIFNpbHZlciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KDQp3b3JkY2xvdWQod29yZHMgPSBkZi5tZWRhbHMkY291bnRyeSwNCiAgICAgICAgICBmcmVxID0gZGYubWVkYWxzJFNpbHZlciwNCiAgICAgICAgICBjb2xvcnMgPSBicmV3ZXIucGFsKDgsICJEYXJrMiIpLA0KICAgICAgICAgIHJhbmRvbS5vcmRlciA9IEZBTFNFKQ0KYGBgDQoNCnwNCnwNCnwNCnwNCg0KIyMjIEJyb256ZQ0KVGhpcyBwbG90IGlsbHVzdHJhdGVzIGJyb256ZSBtZWRhbHMNCmBgYHtyIEJyb256ZSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KDQp3b3JkY2xvdWQod29yZHMgPSBkZi5tZWRhbHMkY291bnRyeSwNCiAgICAgICAgICBmcmVxID0gZGYubWVkYWxzJEJyb256ZSwNCiAgICAgICAgICBjb2xvcnMgPSBicmV3ZXIucGFsKDgsICJEYXJrMiIpLA0KICAgICAgICAgIHJhbmRvbS5vcmRlciA9IEZBTFNFKQ0KYGBgDQoNCkNvbXBhcmVkIHRvIGdvbGQgYW5kIHNpbHZlciBtZWRhbHMsIHRoZSBkaXN0cmlidXRpb24gb2YgYnJvbnplIG1lZGFscyBpcyBtb3JlIGV2ZW4gYW1vbmcgdGhlIGRpZmZlcmVudCBjb3VudHJpZXMuIA0KDQp8DQp8DQp8DQp8DQoNCiMjIDUuIEdvbGQgTWVkYWxzIHBlciBzcG9ydA0KDQpgYGB7ciBldmVudHMxLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KDQoNCmRmLm9sWywgYygxLDMpXSAlPiUgDQogIGdncGxvdChhZXMoZmN0X2luZnJlcShzcG9ydCksIGZpbGw9c3BvcnQpKSArIA0KICBnZW9tX2JhcigpICsgDQogIHhsYWIoInNwb3J0cyIpICsgDQogIHlsYWIoInRvdGFsICBHb2xkIG1lZGFsIG51bWJlciIpICsNCiAgY29vcmRfZmxpcCgpDQogIA0KYGBgDQoNCg0KfA0KfA0KfA0KfA0KDQojIyA2LiBNb3N0IFdpbm5pbmcgQ291bnRyeSBpbiBhIFNpbmdsZSBTcG9ydA0KDQpgYGB7ciBtb3N0IHdpbm5pbmcgY291bnRyeSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmRmLm9sICU+JQ0KICBjb3VudChldmVudCwgY291bnRyeSkgJT4lDQogIGdyb3VwX2J5KGV2ZW50KSAlPiUNCiAgbXV0YXRlKHRvdGFscyA9IHN1bShuKSwgICAgICAgICAgICAgICAgICAgICAgICMgRmluZGluZyB0aGUgbnVtYmVyIG9mIG1lZGFscyANCiAgICAgICAgIHBlcmNlbnRfTWVkYWxzID0gbi9zdW0obikpICU+JSAgICAgICAgICMgcGVyIGNvdW50cnkgc29ydGVkIGJ5IGV2ZW50cw0KICBhcnJhbmdlKGRlc2MocGVyY2VudF9NZWRhbHMpKSAlPiUgICAgICAgICAgICAgIyBjb3VudGluZyB0aGUgdG90YWwgbnVtYmVyIG9mDQogIGZpbHRlcihuPiAyMDApICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1lZGFscyBhbmQgY2FsY3VsYXRpbmcgdGhlIHBlcmNlbnRhZ2UpDQogIGtibChjYXB0aW9uID0gIk1vc3QgV2lubmluZyBDb3VudHJ5IGluIGEgU2luZ2xlIFNwb3J0IiwNCiAgICAgIGNvbC5uYW1lcyA9IGMoJ0V2ZW50JywgJ0NvdW50cnknLCAnTWVkYWxzIHdvbicsICdUb3RhbCBudW1iZXIgb2YgbWVkYWxzJywgJyUnKSwNCiAgICAgIGFsaWduID0gImxsY2NjIiwNCiAgICAgIGRpZ2l0cyA9IDMpICU+JSANCiAga2FibGVfbWF0ZXJpYWwoYygic3RyaXBlZCIsICJob3ZlciIpKQ0KDQpgYGANCl9UaGUgdGFibGUgc2hvd3Mgd2hpY2ggY291bnRyeSB3aGljaCBoYXMgd29uIHRoZSBtb3N0IGNvdW50cnkgaW4gYSBzaW5nbGUgc3BvcnQgKipwZXJjZW50YWdlIHdpc2UqKiBjb21wYXJlZCB0byB0aGUgdG90YWwgYW1vdW50IG9mIG1lZGFscyBnaXZlbi5fDQoNClRoZSB0YWJsZSBzaG93cyB0aGF0IHRoZSBVUyBoYXMgd29uIHRoZSBtb3N0IG1lZGFscyBpbiBhIHNpbmdsZSBzcG9ydCwgd2hpY2ggaXMgQmFza2V0YmFsbC4gSW4gdGhpcyBzcG9ydCwgdGhleSBhY2NvdW50IGZvciA0Miw2JSBvZiB0aGUgbWVkYWxzLiANCg0KfA0KfA0KfA0KfA0KDQojIyA3LiBIaWdoZXN0IFBhcnRpY2lwYXRpb24gaW4gYSBTaW5nbGUgU3BvcnQgDQoNCmBgYHtyIHBhcnRpY2lwYXRpb24sIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQoNCmRmLm9sICU+JQ0KICBncm91cF9ieShjb3VudHJ5LCBzcG9ydCkgJT4lDQogIHN1bW1hcmlzZShldmVudHMgPSBuX2Rpc3RpbmN0KGV2ZW50KSkgJT4lICAgICAgIyBjb3VudGluZyB0aGUgbnVtYmVyIG9mIGV2ZW50cw0KICBhcnJhbmdlKGRlc2MoZXZlbnRzKSkgJT4lICAgICAgICAgICAgICAgICAgICAgICMgYXJyYW5naW5nIGluIGRlc2NlbmRpbmcgb3JkZXINCiAgaGVhZCgpICU+JSANCiAga2JsKGNhcHRpb24gPSAiVGFibGU6IFdoaWNoIGNvdW50cnkgcGFydGljaXBhdGVzIG1vc3QgaW4gYSBzaW5nbGUgc3BvcnQ/IiwNCiAgY29sLm5hbWVzID0gYygnQ291bnRyeScsICdTcG9ydCcsICdOdW1iZXIgb2YgRXZlbnRzJyksDQogIGFsaWduID0gImxsYyIpICU+JSANCiAga2FibGVfbWF0ZXJpYWwoYygic3RyaXBlZCIsICJob3ZlciIpKQ0KDQpgYGANCihfU2NvcmUgZ2l2ZW4gaW4gYWJzb2x1dGUgbnVtYmVyc18pDQoNClRoZSBVUyBwYXJ0aWNpcGF0ZXMgdGhlIG1vc3QgaW4gYSBzaW5nbGUgc3BvcnQsIHdoaWNoIGlzIFdyZXN0bGluZy4gDQoNCk5vdCBzdXJwcmlzaW5nbHksIE5vcndheSBpcyB0aGUgY291bnRyeSB3aXRoIHRoZSBoaWdoZXN0IHBhcnRpY2lwYXRpb24gaW4gc2tpaW5nIA0KDQp8DQp8DQp8DQp8DQoNCiMjIDguIERlZXAgRGl2ZSBpbnRvIHRoZSBVUzoNClNpbmNlIHRoZSBVUyBoYXMgd29uIHRoZSBtb3N0IG1lZGFscyBib3RoIG92ZXJhbGwgYW5kIGluIGEgc2luZ2xlIHNwb3J0IChwZXJjZW50YWdlIHdpc2UpLCBhbmQgaXMgYWxzbyB0aGUgY291bnRyeSB3aXRoIHRoZSBoaWdoZXN0IHBhcnRpY2lwYXRpb24gaW4gYSBzaW5nbGUgc3BvcnQsIGEgZGVlcCBkaXZlIGlzIGludGVyZXN0aW5nLiANCg0KYGBge3IsIHBsb3Qgb3ZlciBVUywgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmRmLnVzIDwtIGRmLm9sICU+JSANCiAgZmlsdGVyKGNvdW50cnkgPT0gIlVuaXRlZCBTdGF0ZXMiKSAlPiUgDQogIHNlbGVjdChjKG1lZGFsLCB5ZWFyLCBzZWFzb24pKSAlPiUNCiAgZ3JvdXBfYnkoeWVhciwgbWVkYWwpICU+JSANCiAgc3VtbWFyaXNlKG5fbWVkYWwgPSBuKCkpICU+JSAgICAgICAgICAgICAgICAgICAgICANCiAgY29tcGxldGUobWVkYWwseWVhcikNCg0KDQojIGZpbmRpbmcgdGhlIHllYXIgd2l0aCB0aGUgbW9zdCBtZWRhbHMgd29uIHRvIHNldCBhIGxpbWl0IG9uIHRoZSB5IGF4aXMuDQptb3N0X21lZGFscyA8LSBtYXgoZGYudXMkbl9tZWRhbCwgbmEucm0gPSBUUlVFKQ0KDQoNCiMgcGxvdHRpbmcgdGhlIGFuaW1hdGlvbg0KZGYudXMgJT4lIA0KICBnZ3Bsb3QoYWVzKHllYXIsbl9tZWRhbCxjb2xvcj1tZWRhbCxncm91cD1tZWRhbCkpICsgDQogIGdlb21fbGluZSgpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgbW9zdF9tZWRhbHMpKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHlsYWIoIk51bWJlciBvZiBNZWRhbHMiKSArIA0KICB4bGFiKCJZZWFyIikgKyANCiAgZ2d0aXRsZSgiT0wgTWVkYWxzIiwgc3VidGl0bGUgPSAiVW5pdGVkIFN0YXRlcywgVVMiKSArIA0KICB0cmFuc2l0aW9uX3JldmVhbCh5ZWFyKQ0KDQpgYGANCg0KVGhlIHBsb3Qgc2hvd2Nhc2VzIHRoZSBkZXZlbG9wbWVudCBvZiBudW1iZXIgb2YgbWVkYWxzIGZvciB0aGUgVVMuDQpUaGVyZSBpcyBhIHNvbWV3aGF0IHNpbWlsYXIgcGF0dGVybiBmb3IgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBtZWRhbHMuDQpHb2xkIG1lZGFscyAoZ3JlZW4gbGluZSkgbW9zdCBvZnRlbiByZXByZXNlbnQgdGhlIG1vc3QgYXR0YWluZWQgbWVkYWwgdHlwZSB0aHJvdWdoIHRpbWUuIA0KDQpUaGUgcGxvdCBhbHNvIGlsbHVzdHJhdGU6DQoNCiogUGVhayBpbiAxOTA1DQoqIFJpc2UgaW4gbnVtYmVyIG9mIGdvbGQgbWVkYWxzIGZyb20gMTk4MA0KDQp8DQp8DQp8DQp8DQoNCiMjIDkuIE1vc3QgV2lubmluZyBDb250ZXN0YW50IA0KDQpgYGB7ciBjb250ZXN0YW50LCBlY2hvPUZBTFNFLCAgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmluZGl2X21lZGFscyA8LSBkZi5vbCAlPiUgICAgICAgICAgICAgICAgICAgIyBjcmVhdGluZyBhIGRhdGEgZnJhbWUgZm9yIG1lZGFscw0KICBncm91cF9ieShhdGhsZXRlLHNwb3J0KSAlPiUgICAgICAgICAgICAgICAjIHBlciBjb250ZXN0YW50cywgYW5kIGFub3RoZXIgd2hlcmUNCiAgc3VtbWFyaXNlKG1lZGFscyA9IG4oKSkgICAgICAgICAgICAgICAgICAgIyBtZWRhbHMgaXMgc29ydGVkIGJ5IGRlc2NlbmRpbmcgb3JkZXINCg0KaW5kaXZfbWVkYWxzIDwtIGRhdGEuZnJhbWUoaW5kaXZfbWVkYWxzKQ0Kc29ydF9pbmRpdl9tZWRhbHMgPC0gaW5kaXZfbWVkYWxzW29yZGVyKC1pbmRpdl9tZWRhbHMkbWVkYWxzKSxdDQoNCnJvd25hbWVzKHNvcnRfaW5kaXZfbWVkYWxzKSA8LSBjKCkNCg0Ka2JsKGhlYWQoc29ydF9pbmRpdl9tZWRhbHMsMTApLCB0aXRsZSA9ICJNb3N0IFdpbm5pbmcgQ29udGVzdGFudHMiLA0KICAgICAgYWxpZ24gPSAibGxjYyIpICU+JSANCiAga2FibGVfbWF0ZXJpYWwoYygic3RyaXBlZCIsICJob3ZlciIpKQ0KDQpgYGANCg0KVGhlIHRhYmxlIHNob3dzIHRoYXQgTWljaGFlbCBQaGVscHMgaXMgdGhlIG1vc3Qgd2lubmluZyBhdGhsZXRlLCB3aXRoIDIyIG1lZGFscy4gDQpCb3RoIE9sZSBFaW5hciBCasO4cm5kYWxlbiBhbmQgQmrDuHJuIETDpmhsaWUgYXJlIGFtb25nIHRoZSB0b3Agd2lubmVycywgd2l0aCByZXNwZWN0aXZlbHkgMTMgYW5kIDEyIG1lZGFscyBlYWNoLiANCg0KXyhBbm5vIDIwMjAgUGVscGhzIGhhcyBhIHRvdGFsIG9mIDI4IG9seW1waWMgbWVkYWxzLCBzdGlsbCByZWlnbmluZyBhcyBtb3N0IHdpbm5pbmcgYXRobGV0ZSlfDQoNCiFbXShodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zLzIvMjcvTWljaGFlbF9QaGVscHNfY29ucXVpc3RhXzIwJUMyJUFBX21lZGFsaGFfZGVfb3Vyb19lXyVDMyVBOV9vdmFjaW9uYWRvXzEwMzY0MjQtMDkwODIwMTYtX21nXzcxNDYuanBnKQ0KDQpbTWljaGFlbCBQaGVscHNdKGh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvMi8yNy9NaWNoYWVsX1BoZWxwc19jb25xdWlzdGFfMjAlQzIlQUFfbWVkYWxoYV9kZV9vdXJvX2VfJUMzJUE5X292YWNpb25hZG9fMTAzNjQyNC0wOTA4MjAxNi1fbWdfNzE0Ni5qcGcpDQoNCnwNCnwNCnwNCnwNCg0KIyMgMTAuIFBhcnRpY2lwYXRpb24gRGV2ZWxvcG1lbnQgYnkgR2VuZGVyDQoNCkxpa2Ugb3RoZXIgcGFydHMgb2Ygc29jaWV0eSwgdGhlIG9seW1waWMgZ2FtZXMgZXhjbHVkZWQgZmVtYWxlIHBhcnRpY2lwYXRpb24gZm9yIHF1aXRlIHNvbWUgdGltZS4gVGhlIGZvbGxvd2luZyBwbG90IHdpbGwgZGVtb25zdHJhdGUgdGhlIGdlbmRlcidzIHBhcnRpY2lwYXRpb24gZGV2ZWxvcG1lbnQgdGhyb3VnaCB0aW1lLiANCg0KfA0KDQpgYGB7ciBnZW5kZXIsIGVjaG89RkFMU0UsIGZpZy53aWR0aCA9IDgsIGZpZy5oZWlnaHQ9IDZ9DQojIE9seW1waWMgbWVkYWxzIGJ5IGdlbmRlciBmb3Igd2ludGVyIGFuZCBzdW1tZXIgY29tYmluZWQNCmRmLm9sICU+JSANCiAgY291bnQoeWVhciwgZ2VuZGVyKSAlPiUNCiAgZ3JvdXBfYnkoeWVhcikgJT4lDQogIG11dGF0ZShQZXJjZW50ID0gbi9zdW0obikqMTAwKSAlPiUgICAgICAgICAgICAgICAgICMgc29ydGluZyBieSBwZXJjZW50YWdlDQogIGFycmFuZ2UoZGVzYyhQZXJjZW50KSkgJT4lDQogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSB5ZWFyLCB5ID0gUGVyY2VudCwgY29sb3IgPSBnZW5kZXIpKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG1pbm9yX2JyZWFrcyA9IHNlcShtaW4oZGYub2wkeWVhcikgLCBtYXgoZGYub2wkeWVhciksIDQpLCANCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcShtaW4oZGYub2wkeWVhciksIG1heChkZi5vbCR5ZWFyKSwgNCkpICsNCiAgbGFicyh0aXRsZSA9ICdPbHltcGljIE1lZGFscyBieSBHZW5kZXInLCBjb2xvciA9ICdMZWdlbmQnLCANCiAgICAgICBzdWJ0aXRsZSA9ICdQZXJjZW50YWdlIG9mIE1lZGFscyBXb24gYnkgRWFjaCBHZW5kZXInKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQ0KDQpgYGANCg0KRnJvbSAxOTAwLCBmZW1hbGUgcGFydGljaXBhdGlvbiBzdGFydGVkIHJpc2luZy4gSG93ZXZlciwgaXQgd291bGQgdGFrZSBhbG1vc3QgOTYgeWVhcnMgYmVmb3JlIHRoZSBwYXJ0aWNpcGF0aW9uIG9mIHRoZSBnZW5kZXJzIHdvdWxkIHJlcHJlc2VudCBhYm91dCA1MCUgb2YgdGhlIGV2ZW50cyBlYWNoLiANCg0KfA0KfA0KfA0KfA0KDQojIyAxMS4gQmFyIEFuaW1hdGlvbiBmb3IgR29sZCBNZWRhbHMgb3ZlciB0aGUgWWVhcnMNCg0KVG9wIDEwIGNvdW50cmllcw0KDQpgYGB7ciBiYXIgYW5pbWF0aW9uLCBlY2hvPUZBTFNFLCAgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCg0KeWVhci5tZWRhbHM8LW1lZGFscyhkZi5vbCwgYnlfeWVhciA9IFRSVUUpICAgICMgc29ydGluZyBieSB5ZWFyIGFuZCBjb3VudHJ5DQojIGZpcnN0LCBjcmVhdGluZyBhbmQgc29ydGluZyBhIGRmIGZvciBtZWRhbHMNCm1lZGFsIDwtIHllYXIubWVkYWxzICU+JSAgICAgICAgICAgICAgICAgICAgICMgY2hvb3NlIHRvIGNvdW50IGdvbGQgbWVkYWxzIGFuZA0KICBzZWxlY3QoeWVhciwgY291bnRyeSwgR29sZCkgJT4lICAgICAgICAgICAgIyBzb3J0IGJ5IGNvdW50cmllcyBvdmVyIHRpbWUNCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lICAgICAgICAgICAgICAgICAgICAgIA0KICBhcnJhbmdlKHllYXIpICU+JSAgICAgICAgICAgICAgICAgICAgICAgICANCiAgbXV0YXRlKHZhbHVlID0gY3Vtc3VtKEdvbGQpKSAlPiUgICAgICAgICAgIA0KICB1bmdyb3VwKCkgICAgDQoNCg0KbWVkYWxzX2Zvcm1hdHRlZCA8LSBtZWRhbCAlPiUNCiAgZ3JvdXBfYnkoeWVhcikgJT4lDQogIG11dGF0ZShyYW5rID0gcmFuaygtdmFsdWUpKSAlPiUgICAgICAgICAgICAjIERlc2NlbmRpbmcgdmFsdWUNCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lIA0KICBmaWx0ZXIocmFuayA8PTEwKSAlPiUgICAgICAgICAgICAgICAgICAgICAgIyBvbmx5IGNob29zaW5nIHRvcCAxMCBjb3VudHJpZXMNCiAgdW5ncm91cCgpDQoNCg0KIyBBbmltYXRpb24gb2YgdGhlIG1lZGFsIGdvbGQgY291bnQgICANCg0KIyAvLyBzb3VjZTogQW1ycnMgKDIwMjAsIDE2LiBNYXJjaCkgYW5pbWF0ZWRfYmFyX2NoYXJ0c19pbl9SLiBSZXRyZWl2ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2FtcnJzL2FuaW1hdGVkX2Jhcl9jaGFydHNfaW5fUi9ibG9iL21hc3Rlci9hbmltYXRlZF9iYXJfcGxvdF9pbl9SLlINCg0KYW5pbSA8LSBnZ3Bsb3QobWVkYWxzX2Zvcm1hdHRlZCwgYWVzKHJhbmssIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gY291bnRyeSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCAgPSBhcy5mYWN0b3IoY291bnRyeSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gYXMuZmFjdG9yKGNvdW50cnkpKSkgKw0KICBnZW9tX3RpbGUoYWVzKHkgICAgICA9IHZhbHVlLzIsDQogICAgICAgICAgICAgICAgaGVpZ2h0ID0gdmFsdWUsDQogICAgICAgICAgICAgICAgd2lkdGggID0gMC45KSwgDQogICAgICAgICAgICAgICAgYWxwaGEgID0gMC44LCANCiAgICAgICAgICAgICAgICBjb2xvciAgPSBOQSkgKw0KICBnZW9tX3RleHQoYWVzKHkgPSAwLCAgICBsYWJlbCA9IHBhc3RlKGNvdW50cnksICIgIikpLCB2anVzdCA9IDAuMiwgaGp1c3QgPSAxKSArDQogIGdlb21fdGV4dChhZXMoeSA9IHZhbHVlLGxhYmVsID0gc2NhbGVzOjpudW1iZXIodmFsdWUsIGFjYyA9IDEpLCBoanVzdCA9IDApKSArDQogIGNvb3JkX2ZsaXAoY2xpcCA9ICJvZmYiLCBleHBhbmQgPSBGQUxTRSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpjb21tYSkgKw0KICBzY2FsZV94X3JldmVyc2UoKSArDQogIGd1aWRlcyhjb2xvciA9IEZBTFNFLCBmaWxsID0gRkFMU0UpICsNCiAgdGhlbWUoYXhpcy5saW5lPWVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3M9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpdGxlLng9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpdGxlLnk9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb249Im5vbmUiLA0KICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kPWVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuYm9yZGVyPWVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvcj1lbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQubWlub3I9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2xpbmUoIHNpemU9LjEsIGNvbG9yPSJncmV5IiApLA0KICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2xpbmUoIHNpemU9LjEsIGNvbG9yPSJncmV5IiApLA0KICAgICAgICBwbG90LnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPTI1LCBoanVzdD0wLjUsIGZhY2U9ImJvbGQiLCBjb2xvdXI9ImdyZXkiLCB2anVzdD0tMSksDQogICAgICAgIHBsb3Quc3VidGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTgsIGhqdXN0PTAuNSwgZmFjZT0iaXRhbGljIiwgY29sb3I9ImdyZXkiKSwNCiAgICAgICAgcGxvdC5jYXB0aW9uID1lbGVtZW50X3RleHQoc2l6ZT04LCBoanVzdD0wLjUsIGZhY2U9Iml0YWxpYyIsIGNvbG9yPSJncmV5IiksDQogICAgICAgIHBsb3QuYmFja2dyb3VuZD1lbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QubWFyZ2luID0gbWFyZ2luKDIsMiwgMiwgNCwgImNtIikpICsNCiAgdHJhbnNpdGlvbl9zdGF0ZXMoeWVhciwgdHJhbnNpdGlvbl9sZW5ndGggPSA0LCBzdGF0ZV9sZW5ndGggPSAxLCB3cmFwID0gRkFMU0UpICsNCiAgdmlld19mb2xsb3coZml4ZWRfeCA9IFRSVUUpICArDQogIGxhYnModGl0bGUgICAgPSAnR29sZCBtZWRhbHMgcGVyIHllYXIgOiB7Y2xvc2VzdF9zdGF0ZX0nLCAgDQogICAgICAgc3VidGl0bGUgPSAiVG9wIDEwIENvdW50cmllcyIsDQogICAgICAgY2FwdGlvbiAgPSAiT2x5bXBpY3MgbWVkYWxzIikgDQoNCmFuaW0NCg0KYGBgDQoNCiMjIFRoZSBFbmQ=